package de.fh.dortmund.pk1.aufgabe1.gui;


import java.io.Serializable;

import javax.swing.*;

import de.fh.dortmund.pk1.aufgabe1.cluedo.Raum;
import de.fh.dortmund.pk1.aufgabe1.cluedo.StartCluedo;

public class Feld extends JFrame implements Serializable {
	private int xPosition;
	private int yPosition;
	private int[][] nachbarFelder = new int[4][2];
	private boolean begehbar;
	private JButton feldButton;
//	private Raum derRaum;
	private Raum derRaum;

	public String isRaum = "";
	private boolean ausRaumRaus = false;
	private boolean besetzt;
	
	public Feld(JButton feldButton, int xPosition, int yPosition,
			boolean begehbar,boolean besetzt/*,Raum derRaum*/) {

		this.feldButton = feldButton;
		this.xPosition = xPosition;
		this.yPosition = yPosition;
		//this.begehbar = begehbar;
	//	this.derRaum = derRaum;
		this.besetzt = besetzt;

		// 0=norden
			nachbarFelder[0][0] = xPosition;
			nachbarFelder[0][1] = yPosition - 1;
		
		// 1=sueden
			nachbarFelder[1][0] = xPosition;
			nachbarFelder[1][1] = yPosition + 1;
		
		// 2=osten
			nachbarFelder[2][0] = xPosition + 1;
			nachbarFelder[2][1] = yPosition;
		
		// 3=westen
			nachbarFelder[3][0] = xPosition - 1;
			nachbarFelder[3][1] = yPosition;
		
		
		setNichtBegehbar(xPosition, yPosition);
		setTueren(xPosition, yPosition);
		setTuerenVerbindung(xPosition, yPosition);
		setAusRaumRaus(xPosition, yPosition);
	}

	public boolean isBegehbar() {
		return begehbar;
	}
	
	public void setBegehbar(boolean begehbar) {
		this.begehbar = begehbar;
	}

	public boolean isBesetzt() {
		return besetzt;
	}
	
	public void setBesetzt(boolean besetzt) {
		this.besetzt = besetzt;
	}
	
	public JButton getFeldButton() {
		return feldButton;
	}

	public Raum getDerRaum() {
		return derRaum;
	}
	
	public int[][] getNachbarFelder() {
		return nachbarFelder;
	}

	public int getXPosition() {
		return xPosition;
	}
	
	public int getYPosition() {
		return yPosition;
	}
	
//	public Raum getDerRaum() {
//		return derRaum;
//	}

	private void setTueren(int xPosition, int yPosition) {	
		
		/* Tueren auf begehbar setzen UND Raeume setzen */
		if(xPosition == 4 && yPosition == 6) {		// Kueche
			this.begehbar = true;
			this.derRaum = StartCluedo.raum1;
		}
		else if((xPosition == 7 && yPosition == 12) || (xPosition == 6 && yPosition == 15)) {		// Speisezimmer
			this.begehbar = true;
			this.derRaum = StartCluedo.raum4;
		}
		else if(xPosition == 6 && yPosition == 19) {		// Salon
			this.begehbar = true;
			this.derRaum = StartCluedo.raum8;
		}
		else if((xPosition == 8 && yPosition == 5) || (xPosition == 9 && yPosition == 7) 
													|| (xPosition == 14 && yPosition == 7)
													|| (xPosition == 15 && yPosition == 5)) {		// Musikzimmer
			this.begehbar = true;
			this.derRaum = StartCluedo.raum2;
		}
		else if(((xPosition == 11 || xPosition == 12) && yPosition == 18)
													|| (xPosition == 14 && yPosition == 20)) {		// Halle
			this.begehbar = true;
			this.derRaum = StartCluedo.raum9;
		}
		else if(xPosition == 19 && yPosition == 5) {		// Wintergarten
			this.begehbar = true;
			this.derRaum = StartCluedo.raum3;
		}
		else if((xPosition == 18 && yPosition == 9) || (xPosition == 22 && yPosition == 12)) {		// Billardzimmer
			this.begehbar = true;
			this.derRaum = StartCluedo.raum6;
		}
		else if((xPosition == 20 && yPosition == 14) || (xPosition == 17 && yPosition == 16)) {		// Bibliothek
			this.begehbar = true;
			this.derRaum = StartCluedo.raum7;
		}
		else if(xPosition == 17 && yPosition == 21) {		// Arbeitszimmer
			this.begehbar = true;
			this.derRaum = StartCluedo.raum10;
		}
	}

	private void setNichtBegehbar(int xPosition, int yPosition) {
		/* Raeume auf nicht begehbar setzen */
		// Kueche
		if(xPosition <= 5 && yPosition >= 2 && yPosition <= 6)
			this.begehbar = false;
		// Speisezimmer
		else if((xPosition <= 4 && yPosition == 9) || (xPosition <= 7 && yPosition >= 10 && yPosition <= 15))
			this.begehbar = false;
		// Salon
		else if(xPosition <= 6 && yPosition >= 19 && yPosition <= 24)
			this.begehbar = false;
		// Musikzimmer
		else if((xPosition >= 10 && xPosition <= 13 && yPosition < 2) || (xPosition >= 8 && xPosition <= 15 && yPosition >= 2 && yPosition <= 7))
			this.begehbar = false;
		// Keller
		else if(xPosition >= 10 && xPosition <= 14 && yPosition >= 10 && yPosition <= 16)
			this.begehbar = false;
		// Halle
		else if(xPosition >= 9 && xPosition <= 14 && yPosition >= 18 && yPosition <= 24)
			this.begehbar = false;
		// Wintergarten
		else if((xPosition >= 18 && xPosition <= 23 && yPosition >= 1 && yPosition <= 4) || (xPosition >= 19 && xPosition <= 23 && yPosition == 5))
			this.begehbar = false;
		// Billarzimmer
		else if(xPosition >= 18 && xPosition <= 23 && yPosition >= 8 && yPosition <= 12)
			this.begehbar = false;
		// Bibliothek
		else if((xPosition >= 18 && xPosition <= 23 && yPosition == 14) || (xPosition >= 17 && xPosition <= 23 && yPosition >= 15 && yPosition <= 17) || (xPosition >= 18 && xPosition <= 23 && yPosition == 18))
			this.begehbar = false;
		// Arbeitszimmer
		else if(xPosition >= 17 && xPosition <= 23 && yPosition >= 21 && yPosition <= 24)
			this.begehbar = false;
		
			/* Sonstige Felder auf nicht begehbar setzen */
		else if(((xPosition >= 0 && xPosition <= 8) || (xPosition >= 15 && xPosition <= 23)) && yPosition == 0)
			this.begehbar = false;
		else if(xPosition == 0 && (yPosition == 8 || yPosition == 16 || yPosition == 18))
			this.begehbar = false;
		else if((xPosition == 6 && yPosition == 1) || (xPosition == 8 && yPosition == 24) || (xPosition == 15 && yPosition == 24) || (xPosition == 17 && yPosition == 1))
			this.begehbar = false;
		else if(xPosition == 23 && (yPosition == 7  || yPosition == 13 || yPosition == 20))
			this.begehbar = false;
		else
			this.begehbar = true;
		
	}

	private void setAusRaumRaus(int xPosition, int yPosition) {
		if(xPosition == 4 && yPosition == 7)		// Kueche
		{ 													
			this.ausRaumRaus = true;
		}
		else if((xPosition == 8 && yPosition == 13)
				|| (xPosition == 6 && yPosition == 16))		// Speisezimmer
		{ 										
			this.ausRaumRaus = true;
		}
		else if(xPosition == 6 && yPosition == 18)		// Salon
		{ 
			this.ausRaumRaus = true;
		}
		else if((xPosition == 7 && yPosition == 5)
				|| (xPosition == 9 && yPosition == 8)
				|| (xPosition == 14 && yPosition == 8)
				|| (xPosition == 16 && yPosition == 5))		// Musikzimmer
		{ 
			this.ausRaumRaus = true;
		}
		else if(((xPosition == 11 || xPosition == 12) && yPosition == 17)
				|| (xPosition == 15 && yPosition == 20))				// Halle
		{ 
			this.ausRaumRaus = true;
		}
		else if(xPosition == 18 && yPosition == 5)		// Wintergarten
		{ 
			this.ausRaumRaus = true;
		}
		else if((xPosition == 17 && yPosition == 9)
				|| (xPosition == 22 && yPosition == 13))		// Billardzimmer
		{ 
			this.ausRaumRaus = true;
		}
		else if((xPosition == 20 && yPosition == 13)
				|| (xPosition == 16 && yPosition == 16))		// Bibliothek
		{ 
			this.ausRaumRaus = true;
		}
		else if(xPosition == 17 && yPosition == 20)		// Arbeitszimmer
		{ 
			this.ausRaumRaus = true;
		}
	}

	private void setTuerenVerbindung(int xPosition, int yPosition) {
		//keine Aussagen ueber Richtung hier (also ht norden usw.)
		
		//Kueche
		if(xPosition == 4 && yPosition == 6){
			nachbarFelder[0][0] = 17;
			nachbarFelder[0][1] = 21;
		}
		
		//Ballroom
		if(xPosition == 8 && yPosition == 5){
			nachbarFelder[0][0] = 9;
			nachbarFelder[0][1] = 8;
			nachbarFelder[1][0] = 14;
			nachbarFelder[1][1] = 8;
			nachbarFelder[2][0] = 16;
			nachbarFelder[2][1] = 5;
		}
		
		if(xPosition == 9 && yPosition == 7){
			nachbarFelder[0][0] = 7;
			nachbarFelder[0][1] = 5;
			nachbarFelder[3][0] = 14;
			nachbarFelder[3][1] = 8;
			nachbarFelder[2][0] = 16;
			nachbarFelder[2][1] = 5;
		}
	
		if(xPosition == 14 && yPosition == 7){
			nachbarFelder[0][0] = 7;
			nachbarFelder[0][1] = 5;
			nachbarFelder[3][0] = 9;
			nachbarFelder[3][1] = 8;
			nachbarFelder[2][0] = 16;
			nachbarFelder[2][1] = 5;
		}
		
		if(xPosition == 15 && yPosition == 5){
			nachbarFelder[1][0] = 7;
			nachbarFelder[1][1] = 5;
			nachbarFelder[0][0] = 9;
			nachbarFelder[0][1] = 8;
			nachbarFelder[3][0] = 14;
			nachbarFelder[3][1] = 8;
		}
		
		//wintergarten
		if(xPosition == 19 && yPosition == 6){
			nachbarFelder[0][0] = - 1;
			nachbarFelder[0][1] = - 1;
		}
	
		if(xPosition == 19 && yPosition == 5){
			nachbarFelder[1][0] = - 1;
			nachbarFelder[1][1] = - 1;
		}
		if(xPosition == 19 && yPosition == 5){
			nachbarFelder[2][0] = 6;
			nachbarFelder[2][1] = 19;
		}	
		
		//Billiard
		if(xPosition == 18 && yPosition == 9){
			nachbarFelder[0][0] = 22;
			nachbarFelder[0][1] = 13;
		}
		
		if(xPosition == 22 && yPosition == 12){
			nachbarFelder[2][0] = 17;
			nachbarFelder[2][1] = 9;
		}
		
		//Buecher
		if(xPosition == 20 && yPosition == 14){
			nachbarFelder[1][0] = 16;
			nachbarFelder[1][1] = 16;
		}
		
		if(xPosition == 17 && yPosition == 16){
			nachbarFelder[0][0] = 20;
			nachbarFelder[0][1] = 13;
		}		
		
		//Arbeitszmmer
		if(xPosition == 16 && yPosition == 21 || xPosition == 6 && yPosition == 19 ){
			nachbarFelder[2][0] = - 1;
			nachbarFelder[2][1] = - 1;	
		}

		if(xPosition == 17 && yPosition == 21){
			nachbarFelder[1][0] = 4;
			nachbarFelder[1][1] = 6;
		}		
		
		//Halle
		if(xPosition == 14 && yPosition == 20){
			nachbarFelder[0][0] = 12;
			nachbarFelder[0][1] = 17;
			nachbarFelder[1][0] = 11;
			nachbarFelder[1][1] = 17;
		}
		
		if(xPosition == 12 && yPosition == 18){
			nachbarFelder[2][0] = 15;
			nachbarFelder[2][1] = 20;
			nachbarFelder[1][0] = 11;
			nachbarFelder[1][1] = 17;
		}
		
		if(xPosition == 11 && yPosition == 18){
			nachbarFelder[2][0] = 12;
			nachbarFelder[2][1] = 17;
			nachbarFelder[1][0] = 15;
			nachbarFelder[1][1] = 20;
		}
		
		//Salon
		if(xPosition == 7 && yPosition == 19 ||  xPosition == 17 && yPosition == 21){
			nachbarFelder[3][0] = - 1;
			nachbarFelder[3][1] = - 1;
		}
		if(xPosition == 6 && yPosition == 19){
			nachbarFelder[3][0] = 19;
			nachbarFelder[3][1] = 5;
		}
		
		//Speisezimmer
		if(xPosition == 6 && yPosition == 15){
			nachbarFelder[2][0] = 8;
			nachbarFelder[2][1] = 12;	
		}

		if(xPosition == 8 && yPosition == 12){
			nachbarFelder[3][0] = 6; nachbarFelder[3][1] = 15;
		} else if(xPosition == 6 && yPosition == 15) {		/* Musikzimmer */
			nachbarFelder[3][0] = 8; nachbarFelder[3][1] = 12;
		} else if(xPosition == 8 && yPosition == 5) {
			nachbarFelder[0][0] = 9; nachbarFelder[0][1] = 8;
			nachbarFelder[1][0] = 14; nachbarFelder[1][1] = 8;
			nachbarFelder[2][0] = 16; nachbarFelder[2][1] = 5;
		} else if(xPosition == 9 && yPosition == 7) {
			nachbarFelder[0][0] = 7; nachbarFelder[0][1] = 5;
			nachbarFelder[2][0] = 14; nachbarFelder[2][1] = 8;
			nachbarFelder[3][0] = 16; nachbarFelder[3][1] = 5;
		} else if(xPosition == 14 && yPosition == 7) {
			nachbarFelder[0][0] = 9; nachbarFelder[0][1] = 8;
			nachbarFelder[2][0] = 7; nachbarFelder[2][1] = 5;
			nachbarFelder[3][0] = 16; nachbarFelder[3][1] = 5;
		} else if(xPosition == 15 && yPosition == 5) {
			nachbarFelder[0][0] = 9; nachbarFelder[0][1] = 8;
			nachbarFelder[1][0] = 14; nachbarFelder[1][1] = 8;
			nachbarFelder[3][0] = 7; nachbarFelder[3][1] = 5;
		} else if(xPosition == 11 && yPosition == 18) {		/* Halle */
			nachbarFelder[1][0] = 12; nachbarFelder[1][1] = 17;
			nachbarFelder[2][0] = 15; nachbarFelder[2][1] = 20;
		} else if(xPosition == 12 && yPosition == 18) {
			nachbarFelder[1][0] = 11; nachbarFelder[1][1] = 17;
			nachbarFelder[2][0] = 15; nachbarFelder[2][1] = 20;
		} else if(xPosition == 14 && yPosition == 20) {
			nachbarFelder[0][0] = 11; nachbarFelder[0][1] = 17;
			nachbarFelder[1][0] = 12; nachbarFelder[1][1] = 17;
		} else if(xPosition == 18 && yPosition == 9) {		/* Billardzimmer */
			nachbarFelder[0][0] = 22; nachbarFelder[0][1] = 13;
		} else if(xPosition == 22 && yPosition == 12) {
			nachbarFelder[0][0] = 17; nachbarFelder[0][1] = 9;
		} else if(xPosition == 20 && yPosition == 14) {		/* Bibliothek */
			nachbarFelder[1][0] = 16; nachbarFelder[1][1] = 16;
		} else if(xPosition == 17 && yPosition == 16) {
			nachbarFelder[0][0] = 20;
			nachbarFelder[0][1] = 13;
		}

		if(xPosition == 7 && yPosition == 12){
			nachbarFelder[1][0] = 6;
			nachbarFelder[1][1] = 16;
		}		
		

	}

	public boolean getAusRaumRaus() {
		return ausRaumRaus;
	}


}
